#include <bits/stdc++.h>
using namespace std;

#define int long long

void solve(){
	int n;cin>>n;
	vector<vector<int>> g(n+1);
	for(int i=0;i<n-1;i++){
		int u,v;cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	vector<int> w(n+1);
	for(int i=1;i<=n;i++){
		cin>>w[i];
	}
	vector<int> f(n+1);
	int ans=0;
	auto dfs=[&](auto&&dfs,int x,int fa)->void{
		int mx=0;
		for(int y:g[x]){
			if(y!=fa){
				dfs(dfs,y,x);
				int sub=f[y]+w[y];
				ans=max(ans,mx+sub+w[x]);
				mx=max(mx,sub);
			}
		}
		f[x]=mx;
	};
	dfs(dfs,1,0);
	cout<<ans;
}

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int t=1;
	// cin>>t;
	while(t--){
		solve();
		if(t)cout<<"\n";
	}
	return 0;
}
